package com.sky.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;

/**
 * 配置跨源资源共享（CORS）的类。
 * 该类用于定义应用程序的CORS策略，允许来自任何源的请求，并对所有HTTP方法和头部提供支持。
 */
@Configuration
public class CorsConfig {

    /**
     * 创建并配置CORS过滤器。
     * 该方法返回一个CorsWebFilter实例，它负责处理所有进入应用程序的HTTP请求的CORS策略。
     *
     * @return CorsWebFilter实例，用于应用CORS配置。
     */
    @Bean
    public CorsWebFilter corsWebFilter() {
        // 创建一个基于URL的CORS配置源
        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
        // 创建CORS配置对象
        CorsConfiguration config = new CorsConfiguration();
        // 允许所有请求头
        config.addAllowedHeader("*");
        // 允许所有请求方法（GET、POST、PUT、DELETE等）
        config.addAllowedMethod("*");
        // 允许所有来源访问
        config.addAllowedOriginPattern("*");
        // 允许请求凭证（例如cookies）
        config.setAllowCredentials(true);
        // 将CORS配置应用到所有URL
        configSource.registerCorsConfiguration("/**", config);
        // 返回配置后的CORS过滤器
        return new CorsWebFilter(configSource);
    }
}

